#pragma once
#include <vector>
using namespace std;

class CSGD_DirectInput;
class CObjectFactory;
class CElemental;
class CPlayer
{
public:
	CPlayer(void);
	~CPlayer(void);
	void Update(float fElapsedTime);
	void Input(void);
	vector<short> GetMonies(void)   {return m_vSoulsOwned;}
	short GetSingleMoney(short index) { return m_vSoulsOwned[index]; }
	vector<short> GetQueue(void)	{return m_vQueuedSouls;}
	void IncreasePool(vector<short> elementalSouls);
	void PoolGeneration( short elementalType );	
	void SetPlayer(bool player1) {IsPlayer1 = player1;}
	bool GetPlayer(void)			{return IsPlayer1;}
	//We could use a function that holds a vector of owned towers that will be used
	//to calcualate return rate of everything
	//GenerateMana(void);
protected:
	enum ElementalTypes { FIRE, AIR, WATER, EARTH, FREE };
	//Just for easy of use
	enum Lanes { TOP, MIDDLE, BOTTOM };
private:
//Used for the souls the player is trying to combine
	vector<short> m_vQueuedSouls;

//Used for the actually amount of souls the player owns
	vector<short> m_vSoulsOwned;

//Used so the player can subtract from the vector
//ex: add fire, pushback(FIRE), dequeue, popback(FIRE), to allow SoulsOwned[FIRE]++;
	vector<short> m_vCommandLine;

//Used if we want to have a delay timer for the units
	//vector<CElemental*> m_vElementalsSpawning;
//Used for ai math and will help reduce checking time
//This vector will hold a vector Elementals in each lane
	vector<CElemental*> m_vUnitsInALanes;

	//This direct input would be replaced with the input manager
	//Input is put within the player so the queued souls can happen for as many players as we have
	CSGD_DirectInput*		m_pDI;
	CObjectFactory*			m_pOF;
	
	bool m_bUsedFree;
	float timerCountdown;
	float soulTimer;
	bool IsPlayer1;
};
